#include <iostream>
#include "PriorityQueue.h"
using namespace std;

void test_priority_queue()
{
	rtx::priority_queue<int,vector<int>, greater<int>> pq;

	pq.push(3);
	pq.push(1);
	pq.push(2);
	pq.push(5);
	pq.push(0);
	pq.push(8);
	pq.push(1);

	while (!pq.empty())
	{
		cout << pq.top() << " ";
		pq.pop();
	}
	cout << endl;

	int arr[] = { 0,3,2,1,6,5,4,9,8,7 };
	rtx::priority_queue<int, vector<int>, greater<int>> heap(arr, arr + sizeof(arr) / sizeof(arr[0]));
	while (!heap.empty())
	{
		cout << heap.top() << " ";
		heap.pop();
	}
	cout << endl;
}

int main()
{
   test_priority_queue();
    
    return 0;
}
//
////#include<iostream>
////using namespace std;
////
////namespace rtx
////{
////	template<class T>
////	struct less
////	{
////		bool operator()(const T& left, const T& right) const
////		{
////			return left < right;
////		}
////	};
////
////	template<class T>
////	struct greater
////	{
////		bool operator()(const T& left, const T& right) const
////		{
////			return left > right;
////		}
////	};
////}
////
////int main()
////{
////	int a = 10, b = 20;
////
////	rtx::less<int> lessCmp;
////	cout << lessCmp(a, b) << endl;
////
////	rtx::greater<int> gtCmp;
////	cout << gtCmp(a, b) << endl;
////
////	return 0;
////}
//
////////////////////////////////////////////////////////////////////////// OJ
//#include <queue>
//class MyStack {
//public:
//	queue<int> q1;
//	queue<int> q2;
//
//	MyStack() {
//
//	}
//
//	void push(int x) {
//		q2.push(x); // q2入队列
//		while (!q1.empty()) // 把q1的元素全入到q2
//		{
//			q2.push(q1.front());
//			q1.pop();
//		}
//		swap(q1, q2); // 交换q1和q2,保证q1任何时候都是栈的属性
//	}
//
//	int pop() {
//		int r = q1.front();
//		q1.pop();
//		return r;
//	}
//
//	int top() {
//		//题目要求int top() 返回栈顶元素。（队列尾）队列不能删尾，能取尾
//		return q1.front();
//	}
//
//	bool empty() {
//		return q1.empty();
//	}
//};